package org.yanex.project.api;

import java.util.List;

import org.yanex.project.api.HTTPMethods.HTTPMethodException;
import org.yanex.project.api.items.Category;
import org.yanex.project.api.items.City;
import org.yanex.project.api.items.Place;
import org.yanex.project.api.parsers.AbstractParser.ParserException;

public interface API {

	/**
	 * @return About project text.
	 * @throws HTTPMethodException
	 * @throws ParserException
	 */
	public String getAbout()
			throws HTTPMethodException, ParserException;

	/**
	 * @return Contacts text.
	 * @throws HTTPMethodException
	 * @throws ParserException
	 */
	public String getContacts()
			throws HTTPMethodException, ParserException;

	/**
	 * @return Complete list of cities.
	 * @throws HTTPMethodException
	 * @throws ParserException
	 */
	public List<City> getCities()
			throws HTTPMethodException, ParserException;

	/**
	 * @param cityId Target city id.
	 * @return Complete list of categories for the specified city.
	 * @throws HTTPMethodException
	 * @throws ParserException
	 */
	public List<Category> getCategories(long cityId)
			throws HTTPMethodException, ParserException;

	/**
	 * @param categoryId Target category id.
	 * @return Complete list of places for the specified category.
	 * @throws HTTPMethodException
	 * @throws ParserException
	 */
	public List<Place> getPlaces(long categoryId)
			throws HTTPMethodException, ParserException;

	/**
	 * @param placeId Target place id.
	 * @return Parsed place item.
	 * @throws HTTPMethodException
	 * @throws ParserException
	 */
	public Place getPlace(long placeId)
			throws HTTPMethodException, ParserException;

}
